package com.linys.scala.qf.day12_SQL

import org.apache.spark.sql.SparkSession

/**
  * 实现聚合函数
  * 通过继承UserDefinedAggregateFunction来实现用户自定义聚合函数。下面展示一个求平均年龄的自定义聚合函数。
  * ps:弱类型指的是在编译阶段是无法确定数据类型的,而是在运行阶段才能创建类型
  */
object UDAFDemo {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName(this.getClass.getName)
      .master("local[2]")
      .getOrCreate()

    // 注册UDAF函数
    spark.udf.register("myaverage", new MyAverAge)

    val df = spark.read.json("dir/DataSource/employee.json")

    df.createOrReplaceTempView("t_employee")

    val res = spark.sql("select myaverage(age) from t_employee")

    res.show()

    spark.stop()
  }
}
